package com.itheima.reggie.config;

import com.itheima.reggie.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

/**
 * WebMvcConfig
 * Created by jiachun.lu on 2024/05/24.
 */
// 使用@Slf4j注解，以便在类中使用日志记录功能，而不需要显式地导入日志库
@Slf4j
// @Configuration注解表明这个类是一个配置类，用于配置Spring MVC的某些特定行为
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    /**
     * 配置静态资源的处理方式。
     * 这个方法重写了WebMvcConfigurationSupport类中的同名方法。
     * 主要是为了设置应用程序中静态资源的路径，使得Spring MVC能够正确地处理这些资源。
     *
     * @param registry ResourceHandlerRegistry实例，用于注册和配置静态资源处理器
     */
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 记录信息，表示进入addResourceHandlers方法
        log.info("addResourceHandlers");
        // 配置处理backend目录下静态资源的请求
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");
        // 配置处理front目录下静态资源的请求
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");
    }

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        converters.add(0, messageConverter);
    }
}
